了解 Kubernetes 架構
Kubernetes Master
Control Plane
ETCD
-
用來存放 K8s Cluster 的資料作為備份,想像為整個集群的 database,記錄整個集群的狀態及資料。當 Controller Plane 故障時,可以透過 etcd 幫我們還原 Kubernetes 的狀態
kube-scheduler
負責集群的資源調配,調度 Pod 運行在哪個 Node 上,是整個 Kubernetes 集群的調度員
kube-controller-manager
負責管理並運行 K8s controller 的組件,負責監視 Cluster 狀態的組件,是 K8s 中所有 resource-objects 的自動化控制中心。kube-controller-manager 又可以細分為:
- Controller-Manager
- Node-Controller
- Replication-Controller
API Server
Kubernetes 的 API Server 是一个 client / server 的架构
- 通过 HTTP 对外提供 RESTful API 服务,client 提交请求,server 回复
- 是无状态的 stateless,所有的状态都存储在 cluster store 里(etcd)
- 集群中各個節點的溝通橋樑,並管理整個 K8s 所需 API 的接口(Endpoint)。一旦 kube-apiserver故障,整個集群就會無法操作,例如無法新增、刪除 Pod
- kube-apiserver也負責 K8s 中的請求的身份認證與授權
Clients
- kubectl
- RESTful API
- other clients
API Object
通过 API server 可以操作的 Kubernetes 对象,它们代表了整个集群的状态
- Example
apiVersion: v1
kind: Pod
metadata:name: web
spec:containers:-name: nginx-container
image: nginx:latest
Node
kubelet
對應 api-server 的接口,每個Node上的實際執行者,負責接收來自api-server 的訊息,例如負責Pod對應的容器的建立、啟動或停止等。
kube-proxy
kube-proxy 是一個 network proxy,負責維護 Node 上的網路規則 (iptables),這些規則允許從群集內部或外部的與 Pod 進行通訊
Container Runtime
Node 上運行容器的執行程式,K8s 預設是 Docker,但也支援其他Runtime Engine,例如rkt、CRI-O、containerd, kata container等
Pod
- Pod是 k8s 里最小的调度单位。
- 可以包含 1 - 多個 Container
- Pod 依創建方式可分為兩種
- Static Pod
- 不需依靠 Controller Plane 的物件,所以可以透過 Static Pod 創建屬於自己 Node 中的controller plane 物件,例如,Control Plane 中的 controller.yaml, etcd.yaml
- kube-apiserver
- Static Pod
- Namespace
- 隔離不同種類 Pod 的環境